home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2a.lha / p4-1.2a / contrib / lm_slave.c < prev    next >
C/C++ Source or Header  |  1992-10-19  |  2KB  |  79 lines

  1. #include "p4.h"
  2. #include "lm.h"
  3.     
  4. slave()    
  5. {
  6. int myid;
  7. char buf[100];
  8. int size;
  9. int i,j,n;
  10. int nslaves;
  11. int start, end;
  12. char *msg;
  13. char loc_msg[200];
  14. int type;
  15. int done;
  16. int from;
  17. int nmsgs;
  18. int value;
  19. int msg_cnt;
  20. int msgs_rcvd[P4_MAXPROCS];  /* cheated and used a p4 internal def */
  21.  
  22.     myid = p4_get_my_id();
  23.     nslaves = p4_num_total_ids() - 1;
  24.     p4_get_cluster_ids(&start, &end);
  25.     /***
  26.     p4_dprintf("Inside slave process %d: nslaves=%d start=%d end=%d\n",
  27.          myid, nslaves, start, end);
  28.     ***/
  29.  
  30.     for (i=0; i < P4_MAXPROCS; i++)
  31.     msgs_rcvd[i] = 0;
  32.     msg_cnt = 0;
  33.  
  34.     p4_dprintfl(9,"receiving...\n");
  35.     type = CNTL;
  36.     from = 0;
  37.     msg = NULL;
  38.     p4_recv(&type, &from, &msg, &size);
  39.     p4_dprintfl(9,"rcvd from=%d type=%d msg=%s\n",from,type,msg);
  40.     p4_msg_free(msg);
  41.     msgs_rcvd[from]++;
  42.     nmsgs = atoi(msg);
  43.  
  44.     type = DATA;
  45.     for (j=1; j <= nmsgs; j++)
  46.     {
  47.     for (i=1; i <= nslaves; i++)
  48.     {
  49.         if (i != myid)
  50.         {
  51.         sprintf(loc_msg,"%d",j);
  52.         p4_dprintfl(9,"sending %d to %d\n",j,i);
  53.         p4_send(DATA, i, loc_msg, sizeof(loc_msg));
  54.         }
  55.     }
  56.     }
  57.  
  58.     done = nmsgs * (nslaves - 1);
  59.     while (msg_cnt < done)
  60.     {
  61.     /**  p4_dprintfl(0,"receiving \n");  **/
  62.     type = DATA;
  63.     from = -1;
  64.     msg = NULL;
  65.     p4_recv(&type, &from, &msg, &size);
  66.     value = atoi(msg);
  67.     msg_cnt++;
  68.     p4_msg_free(msg);
  69.     msgs_rcvd[from]++;
  70.     p4_dprintfl(9,"rcvd from=%d type=%d value=%d\n",from,type,value);
  71.     }
  72.     p4_send(DATA, 0, loc_msg, sizeof(loc_msg));
  73.     p4_dprintf("rcvd from: %d %d %d %d %d %d %d %d \n",
  74.         msgs_rcvd[0], msgs_rcvd[1], msgs_rcvd[2], msgs_rcvd[3],
  75.         msgs_rcvd[4], msgs_rcvd[5], msgs_rcvd[6], msgs_rcvd[7]);
  76.     
  77.     p4_dprintfl(0,"%d exiting\n", p4_get_my_id());
  78. }
  79.